﻿Imports StandAuto.DesktopApi
Imports StandAuto.Models

Public Class FormClientes

    Private Sub DataGridView1_Click(sender As Object, e As EventArgs) Handles DataGridView1.Click


        Dim cliente As Cliente
        Dim dtGridView As DataGridView = CType(sender, DataGridView)
        Try
            Dim rowindex = dtGridView.CurrentCell.RowIndex
            cliente = CType(dtGridView.DataSource()(rowindex), Cliente)
            MapCliente(cliente)
        Catch ex As Exception
            Dim result As DialogResult = MessageBox.Show("Nao conseguimos mapear totalmente os dados do cliente devido a:" + vbCrLf + ex.Message, "Ocurreu um erro:", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Exclamation)
            Select Case result
                Case DialogResult.Abort
                    Me.Close()
                Case DialogResult.Retry
                    DataGridView1_Click(sender, e)
            End Select
        End Try

    End Sub

    Private Sub MapCliente(cliente As Cliente)

        TxtId.Text = cliente.id
        TxtContribuinte.Text = cliente.contribuinte
        TxtLocalidade.Text = cliente.localidade
        TxtMorada.Text = cliente.morada
        TxtNome.Text = cliente.nome
        TxtTelefone.Text = cliente.telefone
        TxtPostal.Text = cliente.codigoPostal
        DTPDataNasc.Value = Convert.ToDateTime(cliente.dataNascimento)
        DataGridView2.DataSource = AcessoCamadaDeDados.GetAllVendasByCliente(cliente.id)
    End Sub

    Private Sub FormClientes_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataGridView1.DataSource = AcessoCamadaDeDados.getAllClientes
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        DataGridView1.DataSource = Utilitarios.BuscarListaPesquisada(Of Cliente)(AcessoCamadaDeDados.getAllClientes(), TextBoxPesquisaClientes.Text)
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim frm As FormTransacao = New FormTransacao()
        If IsNumeric(TxtId.Text) Then
            frm.cliente = AcessoCamadaDeDados.getCliente(TxtId.Text)
            frm.isVenda = True
            frm.ShowDialog()
            If Not ((TxtId.Text = "(novo)" Or String.IsNullOrEmpty(TxtId.Text))) Then
                DataGridView2.DataSource = AcessoCamadaDeDados.GetAllVendasByCliente(TxtId.Text)
            End If
        End If
        'DataGridView2.DataSource = AcessoCamadaDeDados.GetAllVendasByCliente()
    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        If IsNumeric(TxtId.Text) Then ' so vais lá se for numerio
            DataGridView2.DataSource = Utilitarios.BuscarListaPesquisada(Of Venda)(AcessoCamadaDeDados.GetAllVendasByCliente(TxtId.Text), TextBoxPesquisaVenda.Text)
        End If
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        TxtId.Text = "(novo)"
        TxtContribuinte.Text = ""
        TxtLocalidade.Text = ""
        TxtMorada.Text = ""
        TxtNome.Text = ""
        TxtTelefone.Text = ""
        TxtPostal.Text = ""
        DTPDataNasc.Value = DateTime.Now
        DataGridView2.DataSource = Nothing
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Dim CltToSave As Cliente = New Cliente() With {
        .codigoPostal = TxtPostal.Text,
        .contribuinte = TxtContribuinte.Text,
        .dataNascimento = DTPDataNasc.Value.ToString("yyyy-MM-dd"),
         .localidade = TxtLocalidade.Text,
         .morada = TxtMorada.Text,
         .nome = TxtNome.Text,
         .telefone = TxtTelefone.Text,
         .id = -1
        }
        If IsNumeric(TxtId.Text) Then
            CltToSave.id = TxtId.Text
        End If
        Dim ValidaClt As String = validaCliente(CltToSave)
        If (String.IsNullOrEmpty(ValidaClt)) Then
            Try
                AcessoCamadaDeDados.SaveCliente(CltToSave)
                DataGridView1.DataSource = AcessoCamadaDeDados.getAllClientes()
                If Not IsNumeric(TxtId.Text) Then
                    MapCliente(AcessoCamadaDeDados.getAllClientes().OrderBy(Function(z) z.id).Last())
                End If
            Catch ex As Exception
                MessageBox.Show("Erro a guardar o cliente:" & ex.Message, "Erro ao guardar o cliente", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("Erro a validar o clientes antes de guardar:" & vbCrLf & ValidaClt, "Validação de cliente", MessageBoxButtons.OK)
        End If

    End Sub

    Private Function validaCliente(clienteToEval As Cliente) As String
        Dim retval As String = String.Empty

        ' nome tem que estar preenchido
        If String.IsNullOrEmpty(clienteToEval.nome) Then
            retval = "Tem que preencher o nome do cliente."
        End If

        Return retval
    End Function

    Private Sub TextBoxPesquisaVenda_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBoxPesquisaVenda.KeyPress
        If e.KeyChar = vbCr Then
            Button5.PerformClick()
        End If
    End Sub

    Private Sub TextBoxPesquisaClientes_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBoxPesquisaClientes.KeyPress
        If e.KeyChar = vbCr Then
            Button1.PerformClick()
        End If
    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        Dim url As String = AcessoCamadaDeDados.getSetting("URLREPORT")
        If Not String.IsNullOrWhiteSpace(TxtId.Text) Or TxtId.Text = "(novo)" Then
            System.Diagnostics.Process.Start(url & "/Transacao/Vendasbycliente/" + TxtId.Text)
        End If
    End Sub
End Class